
package facade;


import java.util.List;
import persistencia.CriterioBusca;
import persistencia.DAO;


public class FacadeBuscar {
  
       private CriterioBusca criterioDaBusca;
       private DAO dao;

 /*
 Explicação dos parâmetros para a busca
        -tipo busca: ex. todos,nome, etc
         -classe: classe vo na qual a tabela da busca pertence
         -identificador_tabela: de acordo com as variaveis final no inicio da classe
         -campo desejado: ex. nome, codigo - obs: de acordo com a vo
         -oque busca: oque deseja busca. ex. João;
 */

      //retorna o total de registros
      public int totalDeRegistros(Class classe){
           this.setDao(dao = new DAO(classe));
          return this.getDao().buscaTotalRegistros();
       }//fim totalRegistros

       public List buscarTodos(String ordenarPor,Class classe){
          this.setDao(dao = new DAO(classe));
          return(this.getDao().buscarTodos(ordenarPor));
       }//fim buscarTodos

       public List buscarTodosComCriterios(String campo_desejado,String nomeObjetoAssociado,
        Object oque_buscar,String ordenarPor,Class classe){
          this.setDao(dao = new DAO(classe));
          this.setCriterioDaBusca(criterioDaBusca = new CriterioBusca(campo_desejado,oque_buscar));
          return(this.getDao().buscarTodosComAssociacaoECriterios(ordenarPor,nomeObjetoAssociado ,this.getCriterioDaBusca()));
       }//fim buscarTodos

       public List buscaPorNome(String campo_desejado,Object oque_buscar, Class classe){
           this.setDao(dao = new DAO(classe));
           this.setCriterioDaBusca(criterioDaBusca = new CriterioBusca(campo_desejado,oque_buscar));
           return(this.getDao().buscaNome(this.getCriterioDaBusca()));
       }//fim buscaPorNome


       //CONCERTAR
       public List buscaPorCodigo(String campo_desejado,int oque_buscar,Class classe){
           this.setDao(dao = new DAO(classe));
           this.setCriterioDaBusca(criterioDaBusca = new CriterioBusca(campo_desejado,oque_buscar));
           return(this.getDao().buscarCodigo(this.getCriterioDaBusca()));
       }//fim buscarCodigo

       //parametro é o nome do objeto associado na classe
       public List buscaComAssociacao(String campo_desejado, String oque_buscar,String nomeObjetoAssociado,Class classe){
           this.setDao(dao = new DAO(classe));
            this.setCriterioDaBusca(criterioDaBusca = new CriterioBusca(campo_desejado,oque_buscar));
           return(this.getDao().buscaComAssociacao(this.getCriterioDaBusca(), nomeObjetoAssociado));
       }

        //o parametro nomeObjetoAssociado é o nome do objeto associado na classe
    public List buscaComAssociacaoSemCriterio(Class classe,String nomeObjetoAssociado){
        this.setDao(dao = new DAO(classe));
        return (this.getDao().buscaComAssociacaoSemCriterio(nomeObjetoAssociado));
    }

       public List buscaComPaginacao(int firstResult, int maxResult,String ordenarPor,Class classe){
           this.setDao(dao = new DAO(classe));
           return( this.getDao().buscarTodosComPaginacao(firstResult, maxResult,ordenarPor));
       }


       public List buscaComItem(Class classe, String nomeObjetoAssociado){
           this.setDao(dao = new DAO(classe));
           return (this.getDao().buscaComItem(nomeObjetoAssociado));
       }

      public List buscarTodosComAssociacaoSemCriterios(String ordenarPor,String nomeObjetoAssociado,
        Class classe){

          this.setDao(dao = new DAO(classe));
          return (this.getDao().buscarTodosComAssociacaoSemCriterios(ordenarPor,nomeObjetoAssociado));
      }



        //métodos gets e sets
       private CriterioBusca getCriterioDaBusca() {
            return criterioDaBusca;
        }
       private void setCriterioDaBusca(CriterioBusca criterioDaBusca) {
            this.criterioDaBusca = criterioDaBusca;
        }
       private DAO getDao() {
            return dao;
        }
       private void setDao(DAO dao) {
             this.dao = dao;
        }

 
}
